package com.hongdezhi.domain;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

public class VerifyCode {
	private int w=100;//70
	private int h=50;//35
	private Random r=new Random();
	
	private String[] fontNames = {"宋体","华文楷体","黑体","微软雅黑","楷体GB2312"};
	private String codes = "23456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	private Color bgColor=new Color(255,255,255);
	private String text;
	
	private Color randomColor(){
		int red = r.nextInt(150);
		int green = r.nextInt(150);
		int blue = r.nextInt(150);
		return new Color(red,green,blue);
	}
	
	private Font randomFont(){
		int index = r.nextInt(fontNames.length);
		String fontName = fontNames[index];
		int style = r.nextInt(4);
		int size = r.nextInt(5)+24;
		return new Font(fontName,style,size);
	}
	
	//把字符写到图片上
	private void drawLine(BufferedImage image){
		int num = 3;
		Graphics2D g2 = (Graphics2D) image.getGraphics();
		for(int i =0;i<num;i++){
			int x1=r.nextInt(w);
			int y1=r.nextInt(h);
			int x2=r.nextInt(w);
			int y2=r.nextInt(h);
			g2.setStroke(new BasicStroke(1.5F));
			g2.setColor(Color.BLUE);
			g2.drawLine(x1, y1, x2, y2);
		}
	}
	
	//获得随机的字符和数字
	private char randomChar(){
		int index = r.nextInt(codes.length());
		return codes.charAt(index);
	}
	//创建图片
	private BufferedImage createImage(){
		BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
		Graphics2D g2=(Graphics2D) image.getGraphics();
		g2.setColor(Color.yellow);
		g2.fillRect(0, 0, w, h);
		return image;
	}
	
	//获取验证码图片
	public BufferedImage getImage(){
		BufferedImage image=createImage();
		Graphics2D g2 = (Graphics2D) image.getGraphics();
		StringBuilder sb = new StringBuilder();
		//向图片中画4个字符
		for(int i=0;i<4;i++){
			String s=randomChar()+"";
			sb.append(s);
			float x = i*1.0F*w/4;
			g2.setFont(randomFont());
			g2.setColor(randomColor());
			g2.drawString(s, x, h-5);
		}
		this.text=sb.toString();
		drawLine(image);
		return image;
	}
	
	public String getText(){
		return text;
	}
	
	//把图片输出到浏览器上，进行显示
	public static void output(BufferedImage image,OutputStream out) throws IOException{
		ImageIO.write(image, "JPEG", out);
	}
	
	
	
	
	
	
	
	
}
